package me.zhengjie.config.apijson;

import apijson.RequestMethod;
import apijson.framework.APIJSONSQLConfig;
import apijson.orm.SQLConfig;

public class AutoSQLConfig  extends APIJSONSQLConfig {
    public AutoSQLConfig(RequestMethod method, String table) {
        super(method, table);
    }
    public AutoSQLConfig(){super();}

    static {
        DEFAULT_DATABASE = DATABASE_MYSQL;
        DEFAULT_SCHEMA = "";  // TODO 默认模式名，改成你自己的，默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle:
        SIMPLE_CALLBACK = new SimpleCallback() {
            @Override
            public SQLConfig getSQLConfig(RequestMethod requestMethod, String s, String s1, String table) {
                return new AutoSQLConfig(requestMethod, table);
            }

            @Override
            public Object newId(RequestMethod method, String database, String schema, String table) {
                return null;
            }
        };
        RAW_MAP.put("`to`.`id`", "");  // 空字符串 "" 表示用 key 的值 `to`.`id`
        RAW_MAP.put("to.momentId", "`to`.`momentId`");  // 最终以 `to`.`userId` 拼接 SQL，相比以上写法可以让前端写起来更简单
        RAW_MAP.put("(`Comment`.`userId`=`to`.`userId`)", "");  // 已经是一个条件表达式了，用 () 包裹是为了避免 JSON 中的 key 拼接在前面导致 SQL 出错
        RAW_MAP.put("sum(if(userId%2=0,1,0))", "");  // 超过单个函数的 SQL 表达式
        RAW_MAP.put("sumUserIdIsEven", "sum(if(`userId`%2=0,1,0)) AS sumUserIdIsEven");  // 简化前端传参
        RAW_MAP.put("SUBSTRING_INDEX(SUBSTRING_INDEX(content,',',1),',',-1)", "");  // APIAuto 不支持 '，可以用 Postman 测
        RAW_MAP.put("SUBSTRING_INDEX(SUBSTRING_INDEX(content,'.',1),'.',-1) AS subContent", "");  // APIAuto 不支持 '，可以用 Postman 测
        RAW_MAP.put("commentWhereItem1","(`Comment`.`userId` = 38710 AND `Comment`.`momentId` = 470)");
        RAW_MAP.put("to_days(now())-to_days(`date`)<=7","");  // 给 @having 使用
    }

    @Override
    public boolean isMySQL() {
        return true;
    }

    @Override
    public boolean limitSQLCount() {
        return false;
    }

    @Override
    public String getDBVersion() {
        if (isMySQL()) {
            return "8.0.23"; //"8.0.11"; //TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号 //MYSQL 8 和 7 使用的 JDBC 配置不一样
        }
        if (isPostgreSQL()) {
            return "9.6.15"; //TODO 改成你自己的
        }
        if (isSQLServer()) {
            return "2019"; //TODO 改成你自己的
        }
        if (isOracle()) {
            return "18c"; //TODO 改成你自己的
        }
        return null;
    }
}
